package fr.syntheses.blog.Service.Parsing;

import java.util.LinkedList;
import java.util.List;
import java.sql.Connection;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import  fr.syntheses.blog.Model.DAO.PaysDAO;
import com.mysql.jdbc.PreparedStatement;

import fr.syntheses.blog.beans.Pays;

public class PaysHandler extends DefaultHandler  {
	
	//résultats de notre parsing
		private List<Pays> listePays;
		private Pays pays;
		
		//flags nous indiquant la position du parseur
		private boolean inListePays, inPays, inId, inNom, inCodepays; 
		//buffer nous permettant de récupérer les données 
		private StringBuffer buffer;
		
		// variable d'acces à la base de donnee.
		PaysDAO paysDao = new PaysDAO();
		Connection cnx;

		// simple constructeur
		public PaysHandler(){
			super();
		}
		
		
		//détection d'ouverture de balise
		public void startElement(String uri, String localName,
				String qName, Attributes attributes) throws SAXException{
			if(qName.equals("listepays")){
				setListePays(new LinkedList<Pays>());
				inListePays = true;
			}else if(qName.equals("pays")){
				
				//instanciation de la variable pays
				pays = new Pays();
				try{
					int id = Integer.parseInt(attributes.getValue("id"));
					pays.setId(id);
				}catch(Exception e){
					//erreur, le contenu de id n'est pas un entier
					throw new SAXException(e);
				}
				inListePays= true;
			}else {
				buffer = new StringBuffer();
				if(qName.equals("nom")){
					inNom = true;
				}else if(qName.equals("Codepays")){
					inCodepays = true;
				
				}else{
					//erreur, on peut lever une exception
					throw new SAXException("Balise "+qName+" inconnue.");
				}
			}
		}

		//détection fin de balise
		public void endElement(String uri, String localName, String qName)
				throws SAXException{
			if(qName.equals("listepays")){
				inListePays = false;
			}else if(qName.equals("pays")){
				listePays.add(pays);
				pays = null;
				inPays = false;
			}else if(qName.equals("nom")){
				pays.setNom(buffer.toString());
				buffer = null;
				inNom = false;
			}else if(qName.equals("Codepays")){
				pays.setCodepays(buffer.toString());
				buffer = null;
				inCodepays = false;}
			else{
				//erreur, on peut lever une exception
				throw new SAXException("Balise "+qName+" inconnue.");
			}          
		}
		//détection de caractères
		public void characters(char[] ch,int start, int length)
				throws SAXException{
			String lecture = new String(ch,start,length);
			if(buffer != null) buffer.append(lecture);       
		}
		//début du parsing
		public void startDocument() throws SAXException {
			System.out.println("Début du parsing");
		}
		//fin du parsing
		public void endDocument() throws SAXException {
			PreparedStatement request = null;
			int codeErreur = 0;
			String requestSql = "";
			System.out.println("Fin du parsing");
			System.out.println("Resultats du parsing");
			cnx = paysDao.getConnection();
			for(Pays p : listePays) {
				System.out.println(p.getNom());
				System.out.println(p.getId());
				try {
					
//					requestSql = "INSERT INTO pays (NomPays,CodePays) value (?,?) ";
//					request = connexion.prepareStatement(requestSql);		
//					request.setString(1, p.getNomPays());
//					request.setString(2, p.getCodePays());
//					codeErreur = request.executeUpdate();


				}

				catch(Exception e){
					System.out.println("************ Erreur da'ajout des pays dans la base de donnée ************ "+e);
					codeErreur = 0;
				}

			}
			System.err.println("***********************le code Erreur est "+codeErreur+"*****************************");
		}

//		public List<Pays> listPaysXml() throws SAXException {
//			return listPays;
//		}
	
		
		
		
		

		public List<Pays> getListePays() {
			return listePays;
		}


		public void setListePays(List<Pays> listePays) {
			this.listePays = listePays;
		}


		public Pays getPays() {
			return pays;
		}


		public void setPays(Pays pays) {
			this.pays = pays;
		}
		
		
		
		
		
		
		
		
		
		
		
		
		

}
